/**
 * Copyright (c) 2013-Now http://jeesite.com All rights reserved.
 */
package com.jeesite.modules.goods.service;

import java.util.List;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.jeesite.common.service.TreeService;
import com.jeesite.modules.file.utils.FileUploadUtils;
import com.jeesite.modules.goods.dao.GoodsTypeDao;
import com.jeesite.modules.goods.entity.GoodsType;
import com.jeesite.modules.sys.service.DataScopeService;
import com.jeesite.modules.sys.utils.EmpUtils;
import com.jeesite.modules.util.GoodsTypeCacelUtils;

/**
 * 公司管理Service
 * @author thinkgem
 * @version 2016-4-23
 */
@Service
@Transactional(readOnly=true)
public class GoodsTypeService extends TreeService<GoodsTypeDao, GoodsType> {

	@Autowired
	private GoodsTypeDao goodsTypeOfficeDao;
	
	@Autowired
	private DataScopeService dataScopeService;
	
	/**
	 * 获取单条数据
	 */
	@Override
	public GoodsType get(GoodsType goodsType) {
		return super.get(goodsType);
	}
	
	/**
	 * 添加数据权限过滤条件
	 */
	@Override
	public void addDataScopeFilter(GoodsType GoodsType, String ctrlPermi) {
		GoodsType.getSqlMap().getDataScope().addFilter("dsf", "GoodsType", "a.goods_code", ctrlPermi);
	}

	/**
	 * 查询列表
	 */
	@Override
	public List<GoodsType> findList(GoodsType goodsType) {
		return super.findList(goodsType);
	}
	
	public List<String> getGoodsCode(GoodsType goodsType) {
		return dao.getGoodsCode(goodsType);
	}
	
	public List<Map> getList() {
		return dao.getList();
	}
	
	public Map getListByCode(String goodsCode) {
		return dao.getListByCode(goodsCode);
	}
	
	public Map getMainListByCode(String goodsCode) {
		return dao.getMainListByCode(goodsCode);
	}

	
	
	
	public List<Map> getTwoList(GoodsType goodsType) {
		return dao.getTwoList(goodsType);
	}
	
	public List<Map> getMainList() {
		return dao.getMainList();
	}

	/**
	 * 保存类型
	 */
	@Override
	@Transactional(readOnly=false)
	public void save(GoodsType goodsType) {
		if (goodsType.getIsNewRecord()){
			genIdAndValid(goodsType, goodsType.getViewCode());
			// 当前新数据授权，如果用户有上级数据权限，则当前数据也有相应的数据权限
			dataScopeService.insertIfParentExists(goodsType, "goodsType");
		}
		super.save(goodsType);
		
		
		FileUploadUtils.saveFileUpload(goodsType.getGoodsCode(), "user_upload2");
		
		// 重新绑定组织和公司之间的关系
		if (StringUtils.isBlank(goodsType.getGoodsCode())){
			return;
		}
	
		// 清理相关缓存
		clearGoodsTypeCache();
	}
	
	/**
	 * 删除公司
	 */
	@Override
	@Transactional(readOnly=false)
	public void delete(GoodsType goodsType) {
		super.delete(goodsType);
		// 清理相关缓存
		clearGoodsTypeCache();
	}
	
	@Transactional(readOnly=false)
	public void setStatus(GoodsType goodsType) {
		dao.setStatus(goodsType);
		
	}
	
	@Transactional(readOnly=false)
	public void setType(GoodsType goodsType) {
		dao.setType(goodsType);
		
	}
	
	
	/**
	 * 停用当前节点
	 */
	@Override
	@Transactional(readOnly=false)
	public void updateStatus(GoodsType goodsType) {
		dao.updateStatus(goodsType);
		// 清理相关缓存
		clearGoodsTypeCache();
	}
	
	/**
	 * 清理公司相关缓存
	 */
	private void clearGoodsTypeCache(){
		EmpUtils.removeCache(GoodsTypeCacelUtils.CACHE_GoodsType_ALL_LIST);
	}
	public List<Map> getGoodsTypeList(String parentCode){
		return dao.getGoodsTypeList(parentCode);
	}
	public int getState(String [] list){
		return dao.getState(list);
	}
	public List<String> getGoodsCodeId(){
		return dao.getGoodsCodeId();
	}
	@Transactional(readOnly=false)
	public void statistical(List<GoodsType> list){
		dao.statistical(list);
	}

	public GoodsType statisticalNum(String goodsCode){
		return dao.statisticalNum(goodsCode);
	}
}